package test_base

func f0() (result int) {
	//返回1100， 证明return 是在正常赋值之后
	//return 1100 语句会将 1100 赋值给命名返回值 result。此时，result 从 0 变为 1100。
	result = 99
	return 1100
}
func f1() (result int) {
	//返回55 证明defer在return 之后
	defer func() {
		result = 55
	}()
	// defer func() {
	// 	result++
	// }()
	return 0
}

func f2() (r int) {
	//返回5 证明r 在有return后失效
	//return t=5 语句会将 5 赋值给命名返回值 r。此时，r 从 0 变为 5。 而defer后续再改t不影响r
	t := 5
	defer func() {
		t = t + 5
	}()
	return t
}

func f3() (t int) {
	//返回10 证明defer在return 之后，优先defer
	t = 5
	defer func() {
		t = t + 5
	}()
	return t
}
func f4() (r int) {
	//返回1
	//在 defer 语句中，传递的是 r 的当前值（即 0），而不是引用。调用 defer 时，参数 r 被复制到 defer 函数中。
	defer func(r int) {
		r = r + 5
	}(r)
	return 1
}

func f5() (r int) {
	//返回7 这是对上面的补充  return 2 会把2赋值给r  然后 defer又会把r +5  最后是7
	defer func(r *int) {
		*r = *r + 5
	}(&r)
	return 2
}

func f6() (ok bool) {
	//返回ture ok 已经被修改
	type A struct{ I int }
	var B = &A{11}
	var D interface{}
	D = B
	C, ok := D.(*A)
	_ = C
	return
}
